using Godot;
using System;
using Smr.基类;
using Smr;

public partial class 宠物属性 : PanelContainer
{
	[Signal] public delegate void 信号宠物参战状态被改变EventHandler(string UUID, bool 是否参战);
	[Export] private PanelContainer 宠物面板;
	[Export] private HBoxContainer 数值面板;
	[Export] private Label 宠物名称;
	[Export] private Label 宠物称谓;
	[Export] private Button 参战按钮;

	private C宠物模型 选中宠物 = null;

	public override void _Ready()
	{
		宠物面板.Visible = false;
		参战按钮.Pressed += 置宠物参战状态;
	}

	public void 初始化()
	{
	}

	public void 置面板数据(C宠物模型 宠物)
	{
		if (!宠物面板.Visible) 宠物面板.Visible = true;
		清空操作区();

		选中宠物 = 宠物;

		宠物名称.Text = 选中宠物.基础属性.名称;
		宠物称谓.Text = 选中宠物.基础属性.称谓.ToString() + " · " + 选中宠物.基础属性.职级.ToString();
		置成长面板(选中宠物);
		置属性面板(选中宠物);

		参战按钮.Text = 选中宠物.是否参战 ? "休息" : "参战";
	}

	private void 置宠物参战状态()
	{
		if (选中宠物 == null)
		{
			return;
		}

		if (参战按钮.Text == "参战")
		{
			int 当前参战宠物 = 0;

			// 统计当前参战宠物数量
			foreach (var 宠物 in 游戏存档.宠物)
			{
				if (宠物.是否参战)
				{
					当前参战宠物 += 1;
				}
			}

			if (当前参战宠物 >= 配置.宠物参战上限)
			{
				游戏管理.日志实例.置提醒文本("当前参战宠物已达到上限！");
				return;
			}
		}

		选中宠物.是否参战 = !选中宠物.是否参战;
		参战按钮.Text = 选中宠物.是否参战 ? "休息" : "参战";
		EmitSignal(SignalName.信号宠物参战状态被改变, 选中宠物.UUID, 选中宠物.是否参战);
	}

	private void 清空操作区()
	{
		宠物名称.Text = "";
		宠物称谓.Text = "";
		foreach (var 项目 in 数值面板.GetChildren())
		{
			项目.QueueFree();
		}
	}

	private void 置成长面板(C宠物模型 宠物)
	{
		var 成长面板 = new VBoxContainer
		{
			SizeFlagsHorizontal = SizeFlags.ExpandFill
		};
		成长面板.AddChild(new Label()
		{
			Text = "宠 物 成 长:",
		});
		成长面板.AddChild(new Label()
		{
			Text = $"总成长:  {宠物.取当前总成长()} / {宠物.取总成长上限()}"
		});
		成长面板.AddChild(new Label()
		{
			Text = $"体力成长:  {宠物.成长.体力成长} / {宠物.成长.体力上限}"
		});
		成长面板.AddChild(new Label()
		{
			Text = $"精力成长:  {宠物.成长.精力成长} / {宠物.成长.精力上限}"
		});
		成长面板.AddChild(new Label()
		{
			Text = $"物伤成长:  {宠物.成长.物伤成长} / {宠物.成长.物伤上限}"
		});
		成长面板.AddChild(new Label()
		{
			Text = $"神伤成长:  {宠物.成长.神伤成长} / {宠物.成长.神伤上限}"
		});
		成长面板.AddChild(new Label()
		{
			Text = $"速度成长:  {宠物.成长.速度成长} / {宠物.成长.速度上限}"
		});
		成长面板.AddChild(new Label()
		{
			Text = $"防御成长:  {宠物.成长.防御成长} / {宠物.成长.防御上限}"
		});
		数值面板.AddChild(成长面板);
	}

	private void 置属性面板(C宠物模型 宠物)
	{
		var 宠物副本 = 宠物.取综合属性(new C战斗属性());
		var 属性面板 = new VBoxContainer
		{
			SizeFlagsHorizontal = SizeFlags.ExpandFill
		};
		属性面板.AddChild(new Label()
		{
			Text = "宠 物 属 性:"
		});
		属性面板.AddChild(new Label()
		{
			Text = $"毅力:  {宠物副本.基础属性.毅力}"
		});
		属性面板.AddChild(new Label()
		{
			Text = $"体力:  {宠物副本.战斗属性.体力}"
		});
		属性面板.AddChild(new Label()
		{
			Text = $"精力:  {宠物副本.战斗属性.精力}"
		});
		属性面板.AddChild(new Label()
		{
			Text = $"物伤:  {宠物副本.战斗属性.物伤}"
		});
		属性面板.AddChild(new Label()
		{
			Text = $"神伤:  {宠物副本.战斗属性.神伤}"
		});
		属性面板.AddChild(new Label()
		{
			Text = $"速度:  {宠物副本.战斗属性.速度}"
		});
		属性面板.AddChild(new Label()
		{
			Text = $"防御:  {宠物副本.战斗属性.防御}"
		});
		数值面板.AddChild(属性面板);
	}
}
